import { request } from "@/http/axios"

/**
 * 检查字段是否重复
 */
function checkNotRepeat(
  url: string,
  id: number | null,
  column: string,
  value: string
) {
  return request<ApiResponseData<boolean>>({
    url,
    method: "post",
    data: {
      id,
      column,
      value
    }
  })
}
// 判断是否未重复
async function isFieldNotRepeat(url: string, id: number, fieldName: string, value: string) {
  const { data } = await checkNotRepeat(url, id, fieldName, value)
  debugger
  return data
}

/**
 * 验证字段是否重复 校验规则
 * @param url API地址
 * @param fieldName 字段名
 * @param fieldLabel 字段显示名称（如"角色名"）
 * @param formData 表单数据Ref :使用其中的id字段
 * @returns 校验规则函数
 */
export function validateUniqueField(
  url: string,
  fieldName: string,
  fieldLabel: string,
  formData: Ref<{ id?: number }>
): (rule: any, value: string, callback: (error?: Error) => void) => void {
  return (_rule, value, callback) => {
    if (!value) {
      return callback() // 如果值为空，不进行重复校验
    }

    const id = formData.value.id || 0 // 取当前表单的 id（如果没有，默认 0）

    isFieldNotRepeat(url, id, fieldName, value)
      .then((success) => {
        if (!success) {
          callback(new Error(`${fieldLabel} 已存在`)) // 用传入的字段名
        } else {
          callback() // 校验通过
        }
      })
      .catch((error) => {
        ElMessage.error(`验证${fieldLabel}时出错: ${error}`)
        callback(new Error("无法验证唯一性"))
      })
  }
}
